package com.medica.ledproject.common;

import com.alibaba.druid.support.json.JSONUtils;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.gson.JsonNull;
import com.medica.ledproject.entity.DzParkLedPrograms;
import com.medica.ledproject.entity.FontStyle;
import io.swagger.v3.core.util.Json;
import onbon.y2.*;
import onbon.y2.common.AlignmentType;
import onbon.y2.common.Y2Font;
import onbon.y2.message.prog.CheckPlayerOutput;
import onbon.y2.play.*;
import onbon.y2.play.TextArea;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;

import java.awt.*;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;

public class BxyUtil {
    // IP地址，使用LedshowYQ软件设置
    @Value("${uplodFilePath}")
    private static String url ;


    /**
     * 开启或者关闭机器
     * @param url
     * @param isOpen
     * @return
     */
    public static  boolean  openOrDown(String url,boolean isOpen){
        boolean success=false;
        try {  // screen
            url="http://"+url;
        Y2Screen screen = new Y2Screen(url);

        // login

            screen.login("guest","guest");

        if(isOpen){
            success =screen.turnOn();
        }else{
            success= screen.turnOff();
        }
        } catch (Y2Exception e) {
            throw new CustomException(e.getMessage());
        }
        return success;
    }
    public static boolean sendPrograms(String url,  List<DzParkLedPrograms> prolist,String uplodFilePath){
        Boolean sucess=false;
        try{
            url="http://"+url;
            // 创建screen对象，用于与控制卡的交互
            Y2Screen screen = new Y2Screen(url);
            // 登入
//           if(!screen.isScreenOn()){
//               screen.turnOn();
//           }
            // 登入账号和密码默认为guest
            screen.login("guest","guest");
            List<ProgramPlayFile> playFiles=new ArrayList<>();
            if(prolist!=null&&prolist.size()>0){
                for(DzParkLedPrograms p:prolist){
                    ProgramPlayFile pf1 = new ProgramPlayFile(1);
                    // 创建program对象，用于存储节目
                    String[] ares=p.getArea().split(",");
                    if(p.getType()==0){
                        // 创建一个图文区
                        // 创建区域需要注意区域位置和大小，不可以超出屏幕范围，区域和区域之间可以重叠
                        // 控制器支持的区域有很多种，例如：图文区TextArea、时间区DateTimeArea、图片区PicArea、视频区VideoArea等
                        // 区域可以设置显示特效、特效速度和停留时间等
//                        TextArea tArea = new TextArea(Integer.valueOf(ares[0]),Integer.valueOf(ares[1]),Integer.valueOf(ares[2]),Integer.valueOf(ares[3]));
                        TextArea tArea=  addText(p,0);
                        TextArea tArea1=  addText(p,1);
                        // 把区域添加到节目中
                        pf1.getAreas().add(tArea);
                        pf1.getAreas().add(tArea1);
                    }
                    if(p.getType()==1){
                        // 创建一个图片区
//                        PicArea pArea = new PicArea(Integer.valueOf(ares[0]),Integer.valueOf(ares[1]),Integer.valueOf(ares[2]),Integer.valueOf(ares[3]));
                        PicArea pArea = new PicArea(0,0,128,192);
                        //pArea.setStayTime(p.getStayTime());
                        // 图片区域中添加图片
                        PicAreaPage pPage = pArea.addPage(uplodFilePath+p.getPicUrl());
                        pf1.getAreas().add(pArea);
                        pArea.animation(0,16);
                        PicArea pArea1 = new PicArea(128,0,129,192);
                        //pArea1.setStayTime(p.getStayTime());
                        pArea1.animation(0,16);
                        // 图片区域中添加图片
                        PicAreaPage pPage1 = pArea1.addPage(uplodFilePath+p.getPicUrl());
                        pf1.getAreas().add(pArea1);
                    }
                    if(p.getType()==2){
                        // 创建一个视频区
                        //VideoArea vArea = new VideoArea(0,10,100,200);
                        VideoArea vArea = new VideoArea(0,0,128,192);
                        // 视频区中添加视频
                        String urls=uplodFilePath+p.getVideoUrl();
                        VideoAreaPage vPage = vArea.addVideo(urls,100);
                       // vArea.setRotation(VideoArea.RotationType.CW);
                        pf1.getAreas().add(vArea);
                        VideoArea vArea1 = new VideoArea(128,0,129,192);
                        // 视频区中添加视频
                        String urls1=uplodFilePath+p.getVideoUrl();
                        VideoAreaPage vPage1 = vArea1.addVideo(urls1,100);
                        // vArea.setRotation(VideoArea.RotationType.CW);
                        pf1.getAreas().add(vArea1);
                    }
                    playFiles.add(pf1);

                }
                screen.clearPlayResources();
                String list = screen.writePlaylist(playFiles);
                sucess= screen.play(list);
                screen.logout();
            }
        }catch (Exception e){
            e.printStackTrace();
            sucess=false;
        }
        return  sucess;
    }
    public static TextArea addText(DzParkLedPrograms p,int index) throws JsonProcessingException, UnsupportedEncodingException {
        TextArea tArea = new TextArea(0,0,128,192);
        if(index==1){
            tArea = new TextArea(128,0,129,192);
        }
        tArea.animation(0,16);
        //tArea.setStayTime(p.getStayTime());
        // 创建显示内容
        // 显示内容相关设置，在page中设置，比如字体大小，字体颜色，背景颜色，对齐方式等，换行使用换行符\n
        String str = p.getTextContent();
        byte[] bytes = str.getBytes("UTF-8");
        TextAreaTextPage page = tArea.addTextSection(new String(bytes));
        //TextAreaTextPage page = tArea.addTextSection("这个是图文区的显示内容这个是图文区的显示内容这个是图文区的显示内容这个是图文区的显示内容这个是图文区的显示内容这个\n是图文区的显示内容这个是图文区的显示内容这个是图文区的显示内容这个是图文区的显示内容这个是图文区的显示内容这个是图文区的显示内容这个");

        ObjectMapper mapper = new ObjectMapper();
        FontStyle s=mapper.readValue(p.getTextStyle(),FontStyle.class);
        page.setFont(new Y2Font(s.getFontName(),s.getFontSize()));
        if(!StringUtils.isEmpty(s.getFontColor())){
            page.fgColor(Color.getColor(s.getFontColor()));
        }else{
            page.fgColor(Color.red);
        }
        if(!StringUtils.isEmpty(s.getBgColor())){
            page.setBgColor(Color.getColor(s.getBgColor()));
        }else{
            page.setBgColor(Color.black);
        }
        page.fgColor(Color.red);
        page.setBgColor(Color.black);
        switch (s.getVerticalAlignment()){
            case 0:
                page.setVerticalAlignment(AlignmentType.NEAR);
                break;
            case 1:
                page.setVerticalAlignment(AlignmentType.CENTER);
                break;
            case 2:
                page.setVerticalAlignment(AlignmentType.FAR);
                break;

        }
        switch (s.getHorizontalAlignment()){
            case 0:
                page.setHorizontalAlignment(AlignmentType.NEAR);
                break;
            case 1:
                page.setHorizontalAlignment(AlignmentType.CENTER);
                break;
            case 2:
                page.setHorizontalAlignment(AlignmentType.FAR);
                break;
        }
        return  tArea;
    }
}
